package edu.ensabap.matricula.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.stereotype.Repository;

import edu.ensabap.matricula.bean.AlumnoDTO;
import edu.ensabap.matricula.bean.EdgarDTO;
import edu.ensabap.matricula.bean.Ejemplo1;
import edu.ensabap.matricula.constants.MySQlQuery;
import edu.ensabap.matricula.constants.PgQuerys;
import edu.ensabap.matricula.constants.RowMapperConstants;

@Repository
public class EdgarDAO {
	
	private SimpleJdbcTemplate simpleJdbcTemplate;
    private JdbcTemplate jdbcTemplate;
	private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
	
	@Autowired
	public void init(DataSource dataSource) {
		this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
		this.jdbcTemplate=new JdbcTemplate(dataSource);
		this.namedParameterJdbcTemplate=new NamedParameterJdbcTemplate(dataSource);
	}
	
	
	
//	crear metodo que liste edgars
//	@SuppressWarnings("unchecked")
//	public List<EdgarDTO> listar(EdgarDTO edgar){
//		
//		String sql = "SELECT id,codigo,nombre FROM tb_edgar where 1 = 1 ";
//		if(edgar.getNombre()!=null){
//			sql+=" and nombre like '%"+edgar.getNombre()+"%' ";
//		}
//		if(edgar.getCodigo()!=null){
//			sql+=" and codigo like '%"+edgar.getCodigo()+"%' ";
//		}
//		
//
//		sql+=" ORDER BY  id ";
//		return this.jdbcTemplate.query(sql, new RowMapperConstants.EdgarMApper());
//		
//	}
	
	@SuppressWarnings("unchecked")
	public List<EdgarDTO> listar(EdgarDTO edgar,int paginaMostrar,int cantidadFilas){
		
		String sql="SELECT id,codigo,nombre FROM tb_edgar where 1 = 1 ";
		StringBuffer sqlb= new StringBuffer();
		if(edgar.getId()!=0){
			sqlb.append( "and id ="+edgar.getNombre()+" ");
		}
		if(edgar.getNombre()!=null){
			sqlb.append( "and nombre like '%"+edgar.getNombre()+"%' ");
		}
		if(edgar.getCodigo()!=null){
			sqlb.append( "and codigo like '%"+edgar.getCodigo()+"%' ");
		}
		sqlb.append(" ORDER BY  id ");
		
//		para el listado
		sql+=sqlb.toString();
		
//		 calculando el inicio
		int inicio = (paginaMostrar-1)*cantidadFilas;
//		agregajmmos el limit
		
		sql+= " LIMIT "+cantidadFilas+" OFFSET "+inicio ;
		
		System.out.println("EL SQL ES :"+sql);
		
		
		return this.jdbcTemplate.query(sql, new RowMapperConstants.EdgarMApper());
		
	}
	
//	INSERTAR EDGAR

//	funcion que agrega
	public int insertar(EdgarDTO edgar){
			
		String  sql = MySQlQuery.INSERTAR_EDGAR;
		Map<String, Object> parametros= new HashMap<String, Object>();
		parametros.put("codigo",edgar.getCodigo());
		parametros.put("nombre",edgar.getNombre());
	
		return this.simpleJdbcTemplate.update(sql, parametros);
		
	}
	
	public int eliminar(EdgarDTO edgar){
		System.out.println("EL ID ES :"+edgar.getId());
		String sql = MySQlQuery.ELIMINAR_EDGAR;
		Map<String, Object> parametros= new HashMap<String, Object>();
		parametros.put("id",edgar.getId());
		
		return this.simpleJdbcTemplate.update(sql, parametros);
	}
	
//	funccion obtener apartir de id
	@SuppressWarnings("unchecked")
	public List<EdgarDTO> obtenerXID(EdgarDTO edgar){
		System.out.println("entro al dao obtener por parametro");
		String sql = MySQlQuery.OBTENER_POR_ID;
		if(edgar.getId()!=0){
			sql+= " and id= "+ edgar.getId()+" ";
		}		
		return this.jdbcTemplate.query(sql, new RowMapperConstants.EdgarMApper());	
	}
	
	
	public int modificar(EdgarDTO edgar){
		
		System.out.println("el nombre DAO  :"+edgar.getId());
		System.out.println("el nombre DAO  :"+edgar.getNombre());
		System.out.println("el nombre DAO  :"+edgar.getCodigo());
		
		
		Map<String, Object> parametros = new HashMap<String, Object>();
		parametros.put("codigo",edgar.getCodigo());
		parametros.put("nombre",edgar.getNombre());
		parametros.put("id",edgar.getId());
		String sql = MySQlQuery.MODIFICAR_EDGAR;
		
		return this.simpleJdbcTemplate.update(sql,parametros);
	}
	
//	TODO ESTO ES PARA LA PAGINACION
	
//	numero de paginas
	public int numeroPaginas(EdgarDTO edgar,int cantidadFilas){
		
		StringBuffer sqlb= new StringBuffer();
		if(edgar.getCodigo()!=null){
			sqlb.append(" and codigo LIKE '%"+edgar.getCodigo()+"%' ");
		}
		if(edgar.getNombre()!=null){
			sqlb.append(" and nombre LIKE '%"+edgar.getNombre()+"%' ");
		}
//		obtener la cantidad de registros
		StringBuffer sqlbcantidadRegistros=new StringBuffer(MySQlQuery.CANTIDAD_REGISTROS_EDGAR);
		sqlbcantidadRegistros.append(sqlb.toString());
		String cantidadRegistros=sqlbcantidadRegistros.toString();
		
//		obtengo la cantidad de registros
		int cantidad=this.simpleJdbcTemplate.queryForInt(cantidadRegistros);
		
		int numeroDePaginas;
		
		//primero el cociente
		numeroDePaginas = cantidad/cantidadFilas;
		//ahora el residuo
		if(cantidad%cantidadFilas>0)numeroDePaginas++;
		
		return numeroDePaginas;
	}  
	
	
}
